﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Modelo;
using System.Data.SqlClient;

namespace AccesoDatos
{
    public static class BDIngrediente
    {
        public static string cadena = "Data Source=.\\sqlexpress; Initial Catalog=BitFood; Integrated Security=true";
        public static List<Ingrediente> GetIngredientes(String Nombre)
        {
            SqlConnection SQL_conn = null;
            SqlCommand comando = null;
            SqlDataReader reader = null;
            List<Ingrediente> ingredientes = null;
            try
            {
                SQL_conn = new SqlConnection(cadena);
                comando = SQL_conn.CreateCommand();
                comando.CommandText = "SELECT * FROM Ingrediente,Producto WHERE Ingrediente.IdReceta=@nombre and Ingrediente.IdProducto=Producto.Nombre";

                comando.Parameters.AddWithValue("nombre", Nombre);

                SQL_conn.Open();
                reader = comando.ExecuteReader();
                if (reader.HasRows)
                {
                    ingredientes = new List<Ingrediente>();
                    while (reader.Read())
                    {

                        ingredientes.Add(new Ingrediente
                        {
                            Cantidad = float.Parse(reader["Cantidad"].ToString()),
                            producto = new Producto
                            {
                                Cantidad = float.Parse(reader[4].ToString()),
                                Detalle = reader["Detalle"].ToString(),
                                Medida = reader["UnidadDeMedida"].ToString(),
                                Nombre = reader["Nombre"].ToString(),
                                Precio = float.Parse(reader["Precio"].ToString())

                            }
                        });
                    }
                    return ingredientes;
                }
                return null;
            }
            catch (Exception)
            {
                return null;
            }
            finally
            {
                if (SQL_conn != null)
                {
                    SQL_conn.Dispose();
                    if (reader != null)
                        reader.Dispose();
                }
            }
        }
        public static bool RegistrarIngrediente(float cantidad, Producto producto, string nombreReceta)
        {
            SqlConnection conexion = null;
            SqlCommand comando = null;
            try
            {
                conexion = new SqlConnection(cadena);
                comando = conexion.CreateCommand();
                comando.CommandText = "Insert into Ingrediente(Cantidad, IdProducto,IdReceta) values(@cantidad, @idproducto, @idreceta)";
                comando.Parameters.AddWithValue("@cantidad", cantidad);
                comando.Parameters.AddWithValue("@idproducto", producto.Nombre);
                comando.Parameters.AddWithValue("@idreceta", nombreReceta);
                conexion.Open();
                int i = comando.ExecuteNonQuery();
                if (i <= 0)
                    return false;
                return true;

            }
            catch (SqlException)
            {
                return false;
            }
            finally
            {
                if (conexion != null)
                    conexion.Close();
            }
        }

        public static bool EliminarIngrediente(Producto producto, string nombreReceta)
        {
            SqlConnection conexion = null;
            SqlCommand comando = null;
            try
            {
                conexion = new SqlConnection(cadena);
                comando = conexion.CreateCommand();
                comando.CommandText = "Delete from Ingrediente where IdReceta=@idreceta and IdProducto=@idproducto";
                comando.Parameters.AddWithValue("@idproducto", producto.Nombre);
                comando.Parameters.AddWithValue("@idreceta", nombreReceta);
                conexion.Open();
                int i = comando.ExecuteNonQuery();
                if (i <= 0)
                    return false;
                return true;

            }
            catch (SqlException)
            {
                return false;
            }
            finally
            {
                if (conexion != null)
                    conexion.Close();
            }
        }

        public static List<Ingrediente> ObtenerIngredientes(string nombreReceta)
        {
            SqlConnection conexion = null;
            SqlCommand comando = null;
            List<Ingrediente> ingredientes = new List<Ingrediente>();
            try
            {
                conexion = new SqlConnection(cadena);
                comando = conexion.CreateCommand();
                comando.CommandText = "SELECT * FROM Ingrediente,Producto WHERE Ingrediente.IdReceta=@nombrereceta and Ingrediente.IdProducto=Producto.Nombre";
                comando.Parameters.AddWithValue("@nombrereceta", nombreReceta);
                conexion.Open();
                SqlDataReader reader = comando.ExecuteReader();
                if (!reader.HasRows)
                    return null;
                else
                {
                    while (reader.Read())
                    {
                        Ingrediente ingrediente = new Ingrediente();
                        Producto producto = new Producto();
                        ingrediente.Cantidad = float.Parse(reader["Cantidad"].ToString());
                        producto.Nombre = reader["IdProducto"].ToString();
                        ingrediente.producto = producto;
                        ingredientes.Add(ingrediente);
                    }
                    return ingredientes;
                }
            }
            catch (SqlException)
            {
                return null;
            }
            finally
            {
                if (conexion != null)
                    conexion.Close();
            }
        }

        
        public static bool ModificarIngrediente(float cantidad, Producto producto, string nombreReceta)
        {
            SqlConnection conexion = null;
            SqlCommand comando = null;
            try
            {
                conexion = new SqlConnection(cadena);
                comando = conexion.CreateCommand();
                comando.CommandText = "Update Ingrediente set Cantidad=@cantidad where IdProducto=@idproducto and IdReceta=idreceta";
                comando.Parameters.AddWithValue("@cantidad", cantidad);
                comando.Parameters.AddWithValue("@idproducto", producto.Nombre);
                comando.Parameters.AddWithValue("@idreceta", nombreReceta);
                conexion.Open();
                int i = comando.ExecuteNonQuery();
                if (i <= 0)
                    return false;
                return true;

            }
            catch (SqlException)
            {
                return false;
            }
            finally
            {
                if (conexion != null)
                    conexion.Close();
            }
        }
    }
}
